/*
   utils 工具
   使用工具函数

*/ 

function getRandom(min ,max){
    return Math.floor(min + Math.random()*(max - min+1))
}
function getCenter(obj) {
    return {
      x: obj.x + obj.width / 2,
      y: obj.y + obj.height / 2,
    };
  }
  
  //  用于检测 某个值 某个属性 是否为undefinded
  function isUndefined(val) {
    return typeof val === "undefined";
  }
  
  // 碰撞检测函数， 检测两个对象之间是否发生了碰撞
  //  objA 和 objB是两个对象  两个对象中的数据 要能够描述出一个矩形
  //  objA/objB 一定要有四个属性 x,y,width,height
  function isCollide(objA, objB) {
    if (objA === objB) return false;
    if (objA.noCheckCollide || objB.noCheckCollide) return false;
    // 如果发现 只要x,y,width,height中出现了 undefined 我们就要主动的 抛出一个异常 ，程序不再执行
    if (
      isUndefined(objA.x) ||
      isUndefined(objA.y) ||
      isUndefined(objA.width) ||
      isUndefined(objA.height) ||
      isUndefined(objB.x) ||
      isUndefined(objB.y) ||
      isUndefined(objB.width) ||
      isUndefined(objB.height)
    ) {
      //   主动抛出错误， 把对象的信息作为错误信息 打印出来的
      // JSON.stringify 把对象中的内容 转换成字符串
      throw new Error(
        "参数错误！" + "   " + JSON.stringify(objA) + "   " + JSON.stringify(objB)
      );
    }
  
    //  获取A和B 的几何中心
    var centerA = getCenter(objA);
    var centerB = getCenter(objB);
  
    // 2个矩形的几何中心点 在X,Y轴上的距离， 必须都小于 两个矩形的宽/高之和的1/2，这种情况下 两个就发生了碰撞， 函数输出true
    return (
      Math.abs(centerA.x - centerB.x) < (objA.width + objB.width) / 2 &&
      Math.abs(centerA.y - centerB.y) < (objA.height + objB.height) / 2
    );
  }